查看原文
其他

交易履约之产品中心实践

京东科技 邹成兵 京东技术
2024-08-24


Tech

导读

本文主要介绍交易履约产品中心系统发展历程,架构演进升级,平台技术亮点。通过系统架构和平台能力的不断升级,产品中心灵活的支持不同业务线产品差异化管理,可快速适配不同场景的产品配置、产品分发和产品售卖流程。全文从系统建设背景、系统架构、平台技术亮点多方面进行阐述,文章后面介绍了系统基于元数据、模版动态维护产品表单数据,基于ES Mapping动态无缝切换索引等技术亮点,力求将系统性能和体验提升一个台阶。读者可关注文中所讲系统实践过程和架构设计细节,具有一定的参考价值。




01 前言及背景


在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!

1.1  前言


    

交易履约产品中心旨在打造统一的内外部产品供应链管理系统,支持业务发展及对外输出,建立产品管理标准、统一产品管理。从2019年开始建设产品库,逐渐收口各业务线分散的产品管理,统一对接业务线、CRM、财务,极大程度的提升了产品管理效率。系统经过了4年的打磨,拥有非常完善的产品、库存管理及交易能力,沉淀了可扩展、高性能的系统架构和灵活可复用的系统组件。

1.2  背景


    

为满足各业务快速发展的线上线下场景,各业务线产生了自己的产品管理系统,各自维护各自发展。随着业务的不断扩大,应用场景越来越多,各业务线产品管理没有统一的标准,在系统对接、损益核算、系统运营等多方面带来了很多问题。

主要表现为没有统一全局的产品视图,产品编码规则不统一;产品类目多种多样,无统一结构,财务经营分析无标准;对接搜索、推荐系统,每个业务线需单独对接,逐个对接,对接成本较高。为解决上述系统问题,提供统一的产品管理标准,提高运营和生产效率。

因此交易履约产品中心应运而生。已融合了近100条业务线的产品管理,提供5级标准类目配置,支持通过产品模版个性化配置产品表单,支持开放平台建设及产品对外输出,极大程度的提高了产品管理和运营的效率。



02   特点  

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。     截至目前,科技产品中心是京东科技集团唯一的统一的产品管理体系,对接业务及渠道,支持产品售卖,支持财务经营分析。主要特点主要体现在以下几个方面。

截止目前,交易履约产品中心对接业务及渠道,支持产品售卖,支持财务经营分析。主要特点主要体现在以下几个方面。

1.统一管理:各业务线产品统一管理,包括产品上新、变更、上下架、审批流等,提高系统对接和运营效率。

2.统一标准:提供统一的产品类目树、产品编码等主数据信息,有效的支持经营分析和数据分析。

3.统一分发:各业务线产品通过产品中心统一分发到渠道端进行产品展示,助力业务展业。

图1 产品中心特点



03   产品体系   

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

3.1  产品介绍


         

入口:

产品中心作为中台系统,提供各业务线产品展示的数据来源,其入口有多处,包括京东云金融App、京东云官网、京音平台、CRM等多个渠道。以金融App为例,在金融App的“首页”,点击金刚位的产品icon或小标题进入个业务主页,例如,保险产品入口,选择保险栏目,即可进入保险产品列表页,如下图右侧图片。

 图2 产品中心金融App产品入口

通过山海平台,管理各渠道展示的产品信息,通过产品创建、设置定价、上架产品与产品分发的操作,完成产品在各渠道端展示的完整流程。


 图3 产品中心运营管理后台

3.2  产品设计蓝图


    

通过以上介绍,可以看出产品中心作为中台系统,服务于各业务线,其核心服务能力包括统一产品类目、差异化产品管理、多维度库存管理、定价管理和渠道分发管理,通过下图,可以对产品中心系统能力有整体认识。

图4 产品中心产品设计蓝图

3.3  系统方案设计


    
整体架构设计:

产品中心维护的各业务线产品信息,数据来源包括各业务线运营、产品中心运营、外部商家运营录入及业务系统同步,落库产品中心MySQL表,同时异步写入ES,更新R2M缓存;通过DP平台推送数据,进行产品字段归一化处理,统一为搜索、推荐提供标准化字段。产品中心系统内部采用DDD思想进行领域划分,采用微服务架构,提供产品核心服务、分类支撑服务、库存服务及检索服务等,通过统一API聚合查询服务对外提供服务。

图5 产品中心整体架构设计

领域划分:

系统整体架构采用DDD领域思想指导,划分系统业务边界,定义业务身份和扩展点,进行微服务设计,系统领域包括产品核心域、支撑域和通用域。

 图6 产品中心领域划分

业务扩展包定义:

各业务线产品定义,管理流程差异化大,为解决代码腐化,提高研发效率,梳理出通用的的产品管理模型,沉淀平台核心能力,将差异化功能抽象定义为各种扩展点,采用业务包的形式通过SPI方式定制化实现,平台能力与业务功能解耦,做到业务隔离,降低相互影响的风险。

图7 产品中心业务扩展包定义

业务扩展包核心功能示例

/*** 领域能力扩展点*/public interface IDomainAbilityExtension { String DEFAULT_SCENARIO = "__default__";}
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedpublic @interface Extension { String code();
int[] index() default {0};
String[] scenario() default {"__default__"};}
/*** 领域能力拓展点-定义云产品在下架后需要删除打标的标签扩展点*/public interface HandleLabelMapAfterPutOffAbilityExt extends IDomainAbilityExtension { String EXT_CODE = "EXT_HANDLE_LABEL_MAP_AFTER_PUT_OFF_EXT";
@DomainAbilityExtension( code = EXT_CODE, name = "下架后处理标签扩展点" ) void handle(SkuModel model, Map<String, String> labelMap);}

业务扩展点实现示例

@Extension(code = Constants.APP_CODE, scenario = {"jdCloud"}, index = {0})@Slf4jpublic class HandleLabelMapAfterPutOffAbilityExtImpl implements HandleLabelMapAfterPutOffAbilityExt { @Override public void handle(SkuModel model, Map<String, String> labelMap) { log.debug("云产品打标删除 jdCloudPublishLabel pre:{}", labelMap); labelMap.remove("jdCloudPublishLabel"); log.info("云产品打标删除 jdCloudPublishLabel after:{}", labelMap); }}




04   技术经验  

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终基于可拖拽的模版生成产品表单

4.1  基于可拖拽的模板生成产品表单


      

为适配不同业务线产品字段不一致,字段类型多样化的场景,我们引入产品模版的概念,可通过产品运营平台,创建产品模版,绑定分类和渠道,通过拖拽组件的方式,完成页面布局配置,拖拽页面采用产品中心自研的JoyPage可视化搭建平台实现,可以轻松的完成表单布局搭建,像玩“乐高”一样自由搭建产品信息模版。


图8 JoyPage可拖拽的页面搭建工具

JoyPage支持事件配置、动态数据源api接口配置,灵活的进行前后端交互。在搭建过程中,从左侧组件列表拖拽到中间画布区域,点击且选中画布中已有的组件,在右侧组件属性面板进行组件的属性配置,配置完成后,点击预览可浏览页面外观,点击保存按钮即可当前模版布局,保存后自动生成模版信息。
{ "fields": [{ "__config__": { "label": "导航", "tag": "paas-nav", ... }, "__slot__": { "options": [{ "label": "基本信息", "value": "base" }, { "label": "财务信息", "value": "finance" }, { "label": "京东云渠道", "value": "jdcChannel", "ifOn": "this.formData.belongToBusinessGroup!=='LS'", "children": [{ "label": "产品信息", "value": "productLine", "ifOn": "this.formData.jdcChannelFlag === '1'" }, { "label": "销售设置", "value": "sale", "ifOn": "this.formData.jdcChannelFlag === '1'" }, { "label": "非计费项设置", "value": "billing", "ifOn": "this.formData.jdcChannelFlag === '1'" }] }] }, "disabled": false },...}

产品模版配置完成后,可回到图8页面,点击生成版本,将生成的版本绑定到测试、预发或者生产环境,即可在相应的环境上发布模版。产品字段变更无需硬编码,通过可拖拽的模版画布,动态扩展产品表单。

图9 产品中心产品模版设计方案


4.2  产品元数据管理


      

通过可拖拽的可视化画布编辑产品模版,保存模版的同时,解析模版字段写入元数据表,打通产品搜索、产品列表、产品导入等功能,让系统数据变得可配置,可管理。通过JSON Schema来验证指定产品模版JSON字段的校验,包括必填、重复等基础校验、关联校验及复杂的业务校验。产品元数据整体架构如下图所示。

 图10 产品中心产品元数据方案

4.3 支持复杂查询的产品检索能力


     

产品中心索引服务,是提供复杂查询,多条件组合查询的应用,对外接口支持普通Hash检索,也支持表达式检索,其存储介质使用的是ES,核心原理是索引服务监听产品核心服务的数据变更事件,同步更新ES,各业务线复杂查询通过索引服务批量查询接口,返回产品ID列表,再根据产品ID列表读取R2M缓存详细数据给业务方,检索条件支持可动态配置,可扩展,更灵活。

图11 产品中心复杂查询方案

同时提供动态mapping,支持在线重建索引,同步数据,变更别名,通过新索引别名动态改变索引,支持原索引作为备份索引,异常时切换,实现索引的无缝切换。

图12 产品中心复杂查询索引切换

4.4 基于保型加密可配置长度的ID发号器


     

交易履约产品中心为统一业务、渠道、财务的产品主数据管理,涉及产品ID、类目ID、渠道ID、商户ID和计费项ID等多场景下的ID生成,为满足业务需要,同时确保ID唯一性、统一性和可持续性。

产品中心自研ID发号器(暂定发号器取名为JidGenerator),该ID发号器主要应用于以产品中心系统为主的中台系统,用来生成唯一的系统ID,JidGenerator是基于保型加密算法原理实现的分布式ID生成器,该生成器基于每天生成唯一的二维矩阵模型来实现保型加密,ID生成的数据来自于二维矩阵的数值,可根据系统的业务量级自定义加密后ID值的位数(可使用该位数配置生成的矩阵行数)。如下图所示,定义为加密后的值为5位,即每天生成的唯一二维矩阵行数定义为5,列数固定配置为10,共5组slat,每组都是0~9随机生成的数字。

  图13 产品中心ID发号器模型

说明:假设一个系统中如果要生成多种类型的ID,如(渠道ID、分类ID、产品ID等),可使用JidGenerator生成ID时配置的类型别名区分,即同一个系统可生成不同类型ID。同时计算当前日期距离1970-1-1相隔的天数。

使用生成ID的类型别名+相隔1970-1-1的天数作为缓存key(如生成产品ID序号的缓存key为:item19080),缓存需要生成的ID序号,ID序号初始数值和步长可配置,如初始数值配置20即提前生成20个序号,缓存中序号使用完成后继续按照配置的步长累加后再写入缓存。ID的生成根据从缓存中获取序号左位补零的方式获取新数,新数的每位数字作为二维矩阵的下标从二维矩阵中获取加密后的数字生成ID。如上图,假设根据缓存key(如item19080)从缓存中获取的序号为10,左位补零方式扩展为5位后为00010,则加密后的数字为21956。



05   小结  

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

交易履约产品中心已涵盖产品配置、初始化及渠道分发的产品管理能力,通过渠道分发的功能将产品信息分发至不同的渠道或者商家运营平台,进行展业,覆盖内部大多数业务线的金融产品、技术类产品的主数据管理。系统层面也从原来的单体应用,不断演进,迭代升级,目前系统架构基于DDD+扩展点的方式进行领域建模,微服务拆分,通过扩展点解耦系统主流程和个性化业务,形成了拥有JidGenerator、JoyPage、模版配置化、元数据模型等通用的组件化服务能力,交易履约产品中心持续打磨系统,更好的服务于业务,服务于客户,服务于行业。



推荐阅读从原理到应用,人人都懂的ChatGPT指南
VOP消息仓库演进之路|如何设计一个亿级企业消息平台
履约核心引擎低代码化原理与实践
Java Completable Future异步超时实践探索

求分享

求点赞

求在看

打造SAAS化服务的员徽章体系,可以作为标准的产品化方案统一对外输出。结合现有平台的通用能力,实现会员行为全路径覆盖,并能结合企业自身业务特点,规划相应的会员精准营销活动,提升会员忠诚度和业务的持续增长。底层能力:维护用户基础数据、行为数据建模、用户画像分析、精准营销策略的制定

▪功能支撑:会员成长体系、等级计算策略、权益体系、营销底层能力支持

▪用户活跃:会员关怀、用户触达、活跃活动、业务线交叉获客、拉新促活

继续滑动看下一个
京东技术
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存